package 接口.接口使用实例;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-18
 * Time: 22:12
 */
public class Test {
    public static void sort(Comparable[] array) {
        for (int i = 0; i < array.length; i++) {
            boolean flag = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                if(array[j].compareTo(array[j + 1]) > 0) {
                    Comparable tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                    flag = true;
                }
            }
            if(flag == false) {
                return;
            }
        }
    }
    public static void main1(String[] args) {
        //再给定一个学生对象数组, 对这个对象数组中的元素进行排序(按分数降序)
        Student[] students = new Student[]{
                new Student("张三", 15),
                new Student("李四", 16),
                new Student("王五", 17),
                new Student("赵六", 18)
        };
        //按照我们之前的理解, 数组我们有一个现成的 sort 方法, 能否直接使用这个方法呢?
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }

    public static void main2(String[] args) {
        //再给定一个学生对象数组, 对这个对象数组中的元素进行排序(按分数降序)
        Student1[] students = new Student1[]{
                new Student1("张三", 15),
                new Student1("李四", 16),
                new Student1("王五", 17),
                new Student1("赵六", 18)
        };
        //按照我们之前的理解, 数组我们有一个现成的 sort 方法, 能否直接使用这个方法呢?
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }
    public static void main(String[] args) {
        //再给定一个学生对象数组, 对这个对象数组中的元素进行排序(按分数降序)
        Student1[] students = new Student1[]{
                new Student1("张三", 15),
                new Student1("李四", 16),
                new Student1("王五", 17),
                new Student1("赵六", 18)
        };
        //按照我们之前的理解, 数组我们有一个现成的 sort 方法, 能否直接使用这个方法呢?
        //Arrays.sort(students);
        Test.sort(students);
        System.out.println(Arrays.toString(students));
    }
}

/*
//运行出错，抛出异常
Exception in thread "main" java.lang.ClassCastException: 接口.接口使用实例.Student cannot be cast to java.lang.Comparable
 */

/*
仔细思考, 不难发现, 和普通的整数不一样, 两个整数是可以直接比较的, 大小关系明确. 而两个学生对象的大小关系
怎么确定? 需要我们额外指定。
 */

/*
在 sort 方法中会自动调用 compareTo 方法. compareTo 的参数是 Object , 其实传入的就是 Student 类型的对象。
然后比较当前对象和参数对象的大小关系(按分数来算)
- 如果当前对象应排在参数对象之前, 返回小于 0 的数字
- 如果当前对象应排在参数对象之后, 返回大于 0 的数字
- 如果当前对象和参数对象不分先后, 返回 0
 */


/*
//执行结果：
[Student1{name='赵六', score=18}, Student1{name='王五', score=17}, Student1{name='李四', score=16}, Student1{name='张三', score=15}]
 */

/*
注意事项: 对于 sort 方法来说, 需要传入的数组的每个对象都是 "可比较" 的, 需要具备 compareTo 这样的能力. 通
过重写 compareTo 方法的方式, 就可以定义比较规则
 */

/*
//执行结果：
[Student1{name='赵六', score=18}, Student1{name='王五', score=17}, Student1{name='李四', score=16}, Student1{name='张三', score=15}]
 */
